package com.scsj.cloud.producer.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.scsj.cloud.base.constant.FormNoConstants;
import com.scsj.cloud.base.enums.FormNoTypeEnum;
import com.scsj.cloud.base.util.FormNoSerialUtil;
import com.scsj.cloud.base.util.RedisUtil;

/**
 * @D 分布式相关处理类
 * @author caoxiubin
 *
 */
@Service
public class DistributedService {
	
	@Autowired
	private RedisUtil redisUtil;
	
    /**
     * 根据单据编号类型 生成单据编号
     *
     * @param  formNoTypeEnum 单据编号类型
     */
    @SuppressWarnings("static-access")
	public String getDistributedId(FormNoTypeEnum formNoTypeEnum) {
        //获得单号前缀
        //格式 固定前缀 +时间前缀 示例 ：YF20190101
        String formNoPrefix = FormNoSerialUtil.getFormNoPrefix(formNoTypeEnum);
        //获得缓存key
        String cacheKey = FormNoSerialUtil.getCacheKey(formNoPrefix);
        //获得当日自增数
        Long incrementalSerial = redisUtil.incr(cacheKey, 1);
        //设置失效时间 7天
        redisUtil.expire(cacheKey, FormNoConstants.DEFAULT_CACHE_DAYS);
        //组合单号并补全流水号
        String serialWithPrefix = FormNoSerialUtil
                .completionSerial(formNoPrefix, incrementalSerial, formNoTypeEnum);
        //补全随机数
        return FormNoSerialUtil.completionRandom(serialWithPrefix, formNoTypeEnum);
    }
	

}
